#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "exti.h"
#include "beep.h"
int i;
static char flag=1; //关闭流水灯标志
int main(void)
{
  delay_init();
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//分组2
  LED_Init();
  BEEP_Init();        //初始化蜂鸣器
  KEY_Init();        //初始化与按键连接的硬件接口
  EXTIX_Init();		   //外部中断初始化
  while(1)
    {
      GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
                  |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);/*8个LED灯灭*/
      delay_ms(500);	  //延时
      GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3
                  |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);/*8个LED灯亮*/
      delay_ms(500);	  //延时
    }
}
 //⑥中断服务程序
void EXTI0_IRQHandler(void)//外部中断0服务程序
{
  delay_ms(10);//消抖
  if(KEY0==0)
    {
      BEEP=!BEEP;//开关蜂鸣器
    }
  EXTI_ClearITPendingBit(EXTI_Line0);//⑦清除Line0线上的中断标志位
}
void EXTI1_IRQHandler(void)//外部中断1服务程序
{
  delay_ms(10);//消抖
  if(KEY1==0)
    {
      i=0;// led指示位
      flag=0;//开启流水灯
      while(flag==0) //正向流水灯
        {
          PEout(i%8)=0;
          delay_ms(200);
          PEout(i%8)=1;
          i++;
          if(i==8)
            i=0;//重置led指示位
          EXTI_ClearITPendingBit(EXTI_Line1);//清除Line1线上的中断标志位
        }
    }
}
void EXTI2_IRQHandler(void)//外部中断2服务程序
{
  delay_ms(10);//消抖
  if(KEY2==0)
    {
      i=7; // led指示位
      flag=0;//开启流水灯
      while(flag==0) 	//反向流水灯
        {
          PEout(i%8)=0;//LED亮
          delay_ms(200);
          PEout(i%8)=1;//LED灭
          i--;
          if(i==-1)
            i=7;//重置led指示位
          EXTI_ClearITPendingBit(EXTI_Line2);//清除Line2线上的中断标志位
        }
    }
}
void EXTI3_IRQHandler(void)//外部中断3服务程序
{
  delay_ms(10);//消抖
  if(KEY3==0)
    {
      flag=1;//关闭流水灯
GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//关闭所有led
			BEEP=1;//关闭蜂鸣器
    }
  EXTI_ClearITPendingBit(EXTI_Line3);//清除Line3线上的中断标志位
}
